package com.its.myalgorithm.day01;

/**
 * 选择排序  从第一个数开始 把最小的数放到第一位
 */
public class SelectionSort {

    /**
     *
     * n个数
     * 0~n 位置选择一个最小值 和0位置交换
     * 1~n 位置选择一个最小值放到1位置
     * 2~n 位置选择一个最小值放到2位置
     * 3~n 位置选择一个最小值放到3位置
     *
     * @param arr
     */
    public static void selectionSort(int[] arr) {
        if (arr == null || arr.length < 2) {
            return;
        }
        for (int i = 0; i < arr.length; i++) {

            int minIndex = i;
            for (int j = i; j < arr.length; j++) {
                // 第i位置和 (i~i-1)比较
                minIndex = arr[j] < arr[minIndex] ? j : minIndex;
            }
            ArrayUtils.swap(arr, i, minIndex);
        }
    }

    public static void main(String[] args) {
        int testTime = 500000;
        int maxSize = 100;
        int maxValue = 100;
        boolean succeed = true;
        for (int i = 0; i < testTime; i++) {
            int[] arr1 = ArrayUtils.generateRandomArray(maxSize, maxValue);
            int[] arr2 = ArrayUtils.copyArray(arr1);
            selectionSort(arr1);
            ArrayUtils.comparator(arr2);
            if (!ArrayUtils.isEqual(arr1, arr2)) {
                succeed = false;
                ArrayUtils.printArray(arr1);
                ArrayUtils.printArray(arr2);
                break;
            }
        }
        System.out.println(succeed ? "Nice!" : "Fucking fucked!");
    }
}